﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Cine
{
    public class VentaController: IVentaController
    {
        public IVentaService Servicio { get; set; }
        public ISesionService SesionServicio { get; set; }

        public Venta Create(Venta venta)
        {
            return this.Create(venta.NEntradas, venta.Sesion.Id);
        }

        private Venta Create(int numeroEntradas, long sesionId)
        {
            Sesion sesion = SesionServicio.Read(sesionId);
            if (sesion == null)
            {
                throw new SesionException(sesionId);
            }
            Venta venta = new Venta(sesion, numeroEntradas, 7.0);
            Venta ventaResultado = Servicio.Create(venta);
            return ventaResultado;
        }

        public double TotalDevolucionVenta(long idVenta)
        {
            return Servicio.TotalDevolucionVenta(idVenta);
        }


        public Venta Read(long id)
        {
            return Servicio.Read(id);
        }

        public IList<Venta> List()
        {
            return Servicio.List();
        }

        public IList<Venta> List(Sesion sesion)
        {
            return Servicio.List(sesion);
        }

        public IList<Venta> List(long idSesion)
        {
            return Servicio.List(idSesion);
        }

        public Venta Update(Venta venta)
        {
            return Servicio.Update(venta);
        }

        public void Delete(long id)
        {
            Servicio.Delete(id);
        }

        public double TotalVentas()
        {
            return Servicio.CalcularTotalVentas();
        }


        public double TotalVentaSesionSala(long idSesion)
        {
            return Servicio.CalcularTotalVentasSesion(idSesion);
        }


        public int ButacasVendidas(long idSesion)
        {
            return Servicio.CalcularEntradasVendidasSesion(idSesion);
        }
    }
}
